home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / machine / berzerk.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  2KB  |  125 lines

  1. /***************************************************************************
  2.  
  3.   machine.c
  4.  
  5.   Functions to emulate general aspects of the machine (RAM, ROM, interrupts,
  6.   I/O ports)
  7.  
  8. ***************************************************************************/
  9.  
  10. #include "driver.h"
  11. #include "cpu/z80/z80.h"
  12.  
  13. static int irq_enabled;
  14. static int nmi_enabled;
  15. int berzerk_irq_end_of_screen;
  16.  
  17. int berzerkplayvoice;
  18.  
  19. static int int_count;
  20.  
  21.  
  22.  
  23. void berzerk_init_machine(void)
  24. {
  25.     int i;
  26.  
  27.     /* Berzerk expects locations 3800-3fff to be ff */
  28.     for (i = 0x3800; i < 0x4000; i++)
  29.         memory_region(REGION_CPU1)[i] = 0xff;
  30.  
  31.     irq_enabled = 0;
  32.     nmi_enabled = 0;
  33.     berzerk_irq_end_of_screen = 0;
  34.     int_count = 0;
  35. }
  36.  
  37.  
  38. WRITE_HANDLER( berzerk_irq_enable_w )
  39. {
  40.     irq_enabled = data;
  41. }
  42.  
  43. WRITE_HANDLER( berzerk_nmi_enable_w )
  44. {
  45.     nmi_enabled = 1;
  46. }
  47.  
  48. WRITE_HANDLER( berzerk_nmi_disable_w )
  49. {
  50.     nmi_enabled = 0;
  51. }
  52.  
  53. READ_HANDLER( berzerk_nmi_enable_r )
  54. {
  55.     nmi_enabled = 1;
  56.     return 0;
  57. }
  58.  
  59. READ_HANDLER( berzerk_nmi_disable_r )
  60. {
  61.     nmi_enabled = 0;
  62.     return 0;
  63. }
  64.  
  65. READ_HANDLER( berzerk_led_on_r )
  66. {
  67.     osd_led_w(0,1);
  68.  
  69.     return 0;
  70. }
  71.  
  72. READ_HANDLER( berzerk_led_off_r )
  73. {
  74.     osd_led_w(0,0);
  75.  
  76.     return 0;
  77. }
  78.  
  79. READ_HANDLER( berzerk_voiceboard_r )
  80. {
  81.    if (!berzerkplayvoice)
  82.       return 0;
  83.    else
  84.       return 0x40;
  85. }
  86.  
  87. int berzerk_interrupt(void)
  88. {
  89.     int_count++;
  90.  
  91.     switch (int_count)
  92.     {
  93.     default:
  94.     case 4:
  95.     case 8:
  96.         if (int_count == 8)
  97.         {
  98.             berzerk_irq_end_of_screen = 0;
  99.             int_count = 0;
  100.         }
  101.         else
  102.         {
  103.             berzerk_irq_end_of_screen = 1;
  104.         }
  105.         return irq_enabled ? 0xfc : Z80_IGNORE_INT;
  106.  
  107.     case 1:
  108.     case 2:
  109.     case 3:
  110.     case 5:
  111.     case 6:
  112.     case 7:
  113.         if (int_count == 7)
  114.         {
  115.             berzerk_irq_end_of_screen = 1;
  116.         }
  117.         else
  118.         {
  119.             berzerk_irq_end_of_screen = 0;
  120.         }
  121.         return nmi_enabled ? Z80_NMI_INT : Z80_IGNORE_INT;
  122.     }
  123. }
  124.  
  125.